Blogs perficient / blogs / perficient / Python Optimisation: Améliorer les performances du code

Introduction
Python est un langage de programmation incroyablement puissant et facile à utiliser. Cependant, il peut être lent sinon optimisé correctement! Ce guide vous apprendra comment turbuler votre code, le rendant plus rapide, plus maigre et plus efficace. Bouclez-vous et plongeons dans certains hacks d’optimisation épique!
Pour en savoir plus sur les bases de Python, consultez notre guide pour le débutant de la programmation Python.
1. Choisir les bonnes structures de données pour de meilleures performances
Choisir la bonne structure de données, c’est comme choisir le bon outil pour un travail – faites-le mal et vous frapperez un clou avec un tournevis!
1.1 listes vs tuples: Optimisez votre stockage de données
- Utilisez des tuples au lieu des listes Lorsque les éléments ne changent pas (données immuables). Les tuples ont des frais généraux plus bas et sont rapides!
# List (mutable)
my_list = [1, 2, 3]
# Tuple (immutable, faster)
my_tuple = (1, 2, 3)
1.2 Utiliser des ensembles et des dictionnaires pour des recherches rapides
- Recherche dans une liste c’est comme chercher une chaussette perdue dans une pièce en désordre
. D’autre part, Recherche dans un ensemble ou un dictionnaire c’est comme googler quelque chose!
# Slow list lookup (O(n))
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # Yawn... Slow!
# Fast set lookup (O(1))
numbers_set = {1, 2, 3, 4, 5}
print(3 in numbers_set) # Blink and you'll miss it!
1.3 Utilisez des générateurs au lieu de listes pour l’efficacité de la mémoire
- Pourquoi stocker des millions de valeurs en mémoire alors que vous pouvez les générer à la volée?
# Generator (better memory usage)
def squared_numbers(n):
for i in range(n):
yield i * i
squares = squared_numbers(1000000) # No memory explosion!
2. Optimisations de boucle pour le code Python plus rapide
2.1 Évitez le calcul répété dans les boucles pour améliorer les performances
# Inefficient
for i in range(10000):
result = expensive_function() # Ugh! Repeating this is a performance killer
process(result)
# Optimized
cached_result = expensive_function() # Call it once and chill
for i in range(10000):
process(cached_result)
2.2 Utilisez des compréhensions de la liste au lieu de boucles traditionnelles pour le code pythonique
- Pourquoi écrire des boucles ennuyeuses alors que vous pouvez être pythonique?
# Traditional loop (meh...)
squares = []
for i in range(10):
squares.append(i * i)
# Optimized list comprehension (so sleek!
)
squares = [i * i for i in range(10)]
3. Techniques d’optimisation des chaînes
3.1 Utilisez join () au lieu de la concaténation des cordes pour de meilleures performances
# Inefficient (Creates too many temporary strings
)
words = ["Hello", "world", "Python"]
sentence = ""
for word in words:
sentence += word + " "
# Optimized (Effortless and FAST
)
sentence = " ".join(words)
3.2 Utilisez des cordes F pour la mise en forme des chaînes dans Python (Python 3.6+)
name = "Alice"
age = 25
# Old formatting (Ew
)
print("My name is {} and I am {} years old.".format(name, age))
# Optimized f-string (Sleek & stylish
)
print(f"My name is {name} and I am {age} years old.")
4.1 Utilisez du temps pour mesurer le temps d’exécution
import timeit
print(timeit.timeit("sum(range(1000))", number=10000)) # How fast is your code?
4.2 Utiliser le CPROFILE pour un profilage de performances détaillé
import cProfile
cProfile.run('my_function()') # Find bottlenecks like a pro!
Pour en savoir plus sur le profilage, consultez notre guide des outils de profilage Python.
5. Techniques d’optimisation de la mémoire
5.1 Utiliser sys.getSizeOf () pour vérifier l’utilisation de la mémoire
import sys
my_list = [1, 2, 3, 4, 5]
print(sys.getsizeof(my_list)) # How big is that object?
5.2 Utilisez Del et GC.Collect () pour gérer la mémoire
import gc
large_object = [i for i in range(1000000)]
del large_object # Say bye-bye to memory hog!
gc.collect() # Cleanup crew
6. Traitement parallèle et multithreading
6.1 Utiliser le multiprocessement pour les tâches liées au CPU
from multiprocessing import Pool
def square(n):
return n * n
with Pool(4) as p: # Use 4 CPU cores
results = p.map(square, range(100))
6.2 Utiliser le filetage pour les tâches liées aux E / S
import threading
def print_numbers():
for i in range(10):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
Pour en savoir plus sur le traitement parallèle, consultez notre introduction à Python Multithreading.
Conclusion
Félicitations! Vous avez débloqué le plein potentiel de Python en apprenant ces astuces d’optimisation des tueurs. Allez maintenant et écrivez un code Python en fast-fast, économe en mémoire et propre.
Vous avez des hacks d’optimisation préférés? Déposez-les dans les commentaires!
Pour des informations plus détaillées sur l’optimisation de Python, consultez ces ressources:
Source link